贪心算法是一种在每一步选择中都采取当前状态下最优(即最有利)的选择,从而希望导致结果全局最优的算法策略。它的核心思想是 “目光短浅”,仅考虑当前步骤的最优解,不考虑后续可能的影响。
贪心算法的基本要素
* 贪心选择性质:问题的整体最优解可以通过一系列局部最优的选择(即贪心选择)来达到。
* 最优子结构性质:问题的最优解包含其子问题的最优解,即当一个问题的最优解包含其子问题的最优解时,称该问题具有最优子结构性质。
贪心算法的执行步骤
1.确定问题的最优子结构:分析问题,确定其是否具有最优子结构,即一个问题的最优解是否包含子问题的最优解。
2.设计贪心策略:针对问题,制定每一步的贪心选择策略,确定在当前状态下如何选择能得到局部最优解。
3.证明贪心策略的正确性:通过数学证明(如归纳法、反证法等),证明所设计的贪心策略能够导致全局最优解。
4.实现算法:根据贪心策略,编写算法代码实现。
举一个样例:
题目描述
今天老师买了 n 盒饼干,给 m 名孩子分发 n 盒饼干,每一个孩子最多只能分发一盒饼干。每一盒饼干的大小各不相同,每个孩子都有一个想要获得的饼干大小。当饼干的大小大于等于孩子想要获得的饼干大小,孩子就会获得满足,现在需要给孩子分发饼干,并且使得尽可能多的孩子获得满足。
代码:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
递推:
冷知识:递推比递归简单
样例题:
这题递推的思路来说的话,只需要推出一个公式(a[i]=a[i-1]+a[i-2])然后推出数组a,最后输出
AC代码: